//////////////////////////////
// Analizador sntactico
//////////////////////////////

header{
	package documentosRepositorio;
	
	import java.util.List;
	import java.util.ArrayList;
	import java.util.Iterator;
}

class Anasint extends Parser;

// Atributos del analizador

{ 
	
//	Lista que almacena los documentos del repositorio.
	private List<Documento> documentosRep = new ArrayList();

// 	Lista de palabras claves por las que se puede buscar el documento. 
	private List<String> palabrasClavesDoc;
	
	
	private void addDocumento(Documento documento){		
		this.documentosRep.add(documento);			
	}
	
	private void addPalabrasClaves(String palabraClave){
		this.palabrasClavesDoc.add(palabraClave);
	}
	
	public List<Documento> getDocumentosRep(){
		return this.documentosRep;
	}
	
	private String suprimeCorchetes(String texto){
		return texto.substring(1, texto.length()-1);
	}
	
	private String[] toArrayPalabrasClaves(){
			String[] palClaves = new String[this.palabrasClavesDoc.size()];	
			
			int i = 0;
			for(String palabra: this.palabrasClavesDoc){
				palClaves[i] = palabra;
				i++;
			}
			
			return palClaves;
	}
	
	public String toString(){
		String s = "";
		
		Iterator it = this.documentosRep.iterator();
		while(it.hasNext()){
			s += ((Documento)it.next()).toString();		
		}
		
		return s;
	}
}

repositorio: (documentos)* EOF;

documentos {String comentario="", ruta="", fichero="", nombre="";}: 
			"DOCUMENTO" 
			nombre = nombre 
			fichero = fichero
			ruta = ruta 
			palabrasClaves 
			comentario = comentarios
			{
				
				Documento documento = new Documento(nombre, fichero, ruta,
				 comentario, this.toArrayPalabrasClaves());
				 
				 this.addDocumento(documento);
			}; 
 
nombre returns [String nombre = "";]: "NOMBRE"  t:TEXTO
{
	nombre = this.suprimeCorchetes(t.getText());
}
;

fichero returns [String fichero = "";]: "FICHERO" t:TEXTO
{
	fichero = this.suprimeCorchetes(t.getText());
}
;

ruta returns [String ruta = "";]: "RUTA" t:TEXTO
{
	ruta = this.suprimeCorchetes(t.getText());
}
;

palabrasClaves: "PALABRAS" "CLAVES" "{" listaPalabras "}";

listaPalabras: p:PALABRA 
				{
					this.palabrasClavesDoc = new ArrayList();
					this.addPalabrasClaves(p.getText());
				}
				(COMA p1:PALABRA 
				{
					this.addPalabrasClaves(p1.getText());
				})*
				;
				
	
comentarios returns[String comentarios = ""]: "COMENTARIOS" t:TEXTO
	{
		comentarios = this.suprimeCorchetes(t.getText());	
	}; 